package classloader;


import org.junit.Test;

/**
 *
 * Created by svenl on 7/21/2017.
 */
public class ClassloadHierachyTest {

    /**
     *  博客地址: http://blog.csdn.net/briblue/article/details/54973413
     *
     * - Bootstrap ClassLoader 最顶层的加载类，主要加载核心类库，%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar
     *  和class等。另外需要注意的是可以通过启动jvm时指定-Xbootclasspath和路径来改变Bootstrap ClassLoader的加载目录。
     *  比如java -Xbootclasspath/a:path被指定的文件追加到默认的bootstrap路径中。我们可以打开我的电脑，在上面的目录下查看，
     *  看看这些jar包是不是存在于这个目录。
     *
     - Extention ClassLoader 扩展的类加载器，加载目录%JRE_HOME%\lib\ext目录下的jar包和class文件。
        还可以加载-D java.ext.dirs选项指定的目录。
     *
     - Appclass Loader也称为SystemAppClass 加载当前应用的classpath的所有类。

     一个ClassLoader创建时如果没有指定parent，那么它的parent默认就是AppClassLoader
     */
    @Test
    public void  test1() {

        TestC testC = new TestC();

        //sun.misc.Launcher$AppClassLoader@18b4aac2
        System.out.println( testC.getClass().getClassLoader() );

       // sun.misc.Launcher$ExtClassLoader@7ea987ac
        /**
         * AppClassLoader的父加载器是Extention ClassLoader
         */
        System.out.println(  testC.getClass().getClassLoader().getParent() );
        //null
        /**
         * ExtClassLoader的parent为null，所以它向上委托时，系统会为它指定Bootstrap ClassLoader。
         */
        System.out.println(  testC.getClass().getClassLoader().getParent().getParent() );
    }


    @Test
    public void test2(){

        //BootStrap的类加载路径
        /**
         * C:\Program Files\Java\jdk1.8.0_111\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\rt.jar;
         * C:\Program Files\Java\jdk1.8.0_111\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\jsse.jar;
         * C:\Program Files\Java\jdk1.8.0_111\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_111\jre\lib\charsets.jar;
         * C:\Program Files\Java\jdk1.8.0_111\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_111\jre\classes
         */
       // System.out.println(System.getProperty("sun.boot.class.path"));

        //extClassLoader的类加载路径
        //C:\Program Files\Java\jdk1.8.0_111\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
       // System.out.println(  System.getProperty("java.ext.dirs"));

        //AppClassLoader加载的路径
        //各种jar包的位置
        System.out.println(System.getProperty("java.class.path"));


    }
}
